iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 17
1
Software Development

從零開始的Python練成記系列 第 17

[Day 17]除了物件導向,我把Input功能導入了

  • 分享至 

  • xImage
  •  

對於昨天的[Day 16]物件導向化:Bubble Sort繼續向下發揮,簡單來說,昨天的版本還只是透過現成的List進行分類,但今天的是要將使用者的輸入值加入陣列,然後再進行分類,所以今天就會面對「輸入格式」的問題,那就進到程式碼的部分吧

說明我都寫在程式碼裡面了,有程式的問題可以在留言區告訴我

class Bubble_sort(object):
    def __init__(self,lister):
    #建構基礎物件的形式
        self.lister = lister
    def sort(self):
    #核心部分之一:Bubble Sort方法
        self.sorter = self.lister
        for x in range(0, len(self.sorter) - 1):
            booleaner = False
            #這個booleaner參數,其實是為了要把「有進行」交換的狀態進行輸出而設定的
            for y in range(0, len(self.sorter) - 1):
                if self.sorter[y] > self.sorter[y + 1]:
                    tmp = self.sorter[y]
                    self.sorter[y] = self.sorter[y + 1]
                    self.sorter[y + 1] = tmp
                    booleaner = True
            if booleaner == True:
                print("After " + str(x + 1) + " time(s) of exchange: " + str(self.sorter))
            else:
                continue
        return self.sorter
        #在最後將「已完成排序」的List進行回傳
    def print_origin(self):
        print("Your input is: " + str(self.lister))
        #印出由使用者輸入的資料原始狀態
    def print_after(self):
        print("The result after Bubble Sort is: " + str(Bubble_sort.sort(self)))
        #印出已完成排序的資料
        #後面那串str(Bubble_sort.sort(self))之所以會是這樣
        #是因為前面有輸出其他字串,所以要轉成str屬性,然後透過物件導向的方法得到資料

raw_data = []
readin = True
#驅使下方的reader方法運作的布林值
def reader(readin):
    while readin == True:
    #使用while迴圈,確保使用者不會在尚未輸入完資料的時候就停止
        getint = input("請輸入要進行分類的數據,或輸入stop結束輸入:")
        if getint == "stop":
            readin = False
        else:
            x = getint.format(int)
            #先做第一步的格式轉換,但其實透過下方的isdigit()就可以辨識了
            if x.isdigit() is False:
                print("格式錯誤,請重新輸入!")
            else:
                raw_data.append(x)
    else:
    #這裡就是當while迴圈結束之後要進行的其他步驟
        runner = Bubble_sort(raw_data)
        runner.print_origin()
        runner.sort()
        runner.print_after()
reader(readin)
#整個程式驅動的起點

示範結果(請忽略內容的"#")

#請輸入要進行分類的數據,或輸入stop結束輸入:58
#請輸入要進行分類的數據,或輸入stop結束輸入:27
#請輸入要進行分類的數據,或輸入stop結束輸入:asd
#格式錯誤,請重新輸入!
#請輸入要進行分類的數據,或輸入stop結束輸入:62
#請輸入要進行分類的數據,或輸入stop結束輸入:5
#請輸入要進行分類的數據,或輸入stop結束輸入:49
#請輸入要進行分類的數據,或輸入stop結束輸入:33
#請輸入要進行分類的數據,或輸入stop結束輸入:29
#請輸入要進行分類的數據,或輸入stop結束輸入:17
#請輸入要進行分類的數據,或輸入stop結束輸入:stop
#Your input is: ['58', '27', '62', '5', '49', '33', '29', '17']
#After 1 time(s) of exchange: ['27', '58', '5', '49', '33', '29', '17', '62']
#After 2 time(s) of exchange: ['27', '5', '49', '33', '29', '17', '58', '62']
#After 3 time(s) of exchange: ['27', '49', '33', '29', '17', '5', '58', '62']
#After 4 time(s) of exchange: ['27', '33', '29', '17', '49', '5', '58', '62']
#After 5 time(s) of exchange: ['27', '29', '17', '33', '49', '5', '58', '62']
#After 6 time(s) of exchange: ['27', '17', '29', '33', '49', '5', '58', '62']
#After 7 time(s) of exchange: ['17', '27', '29', '33', '49', '5', '58', '62']
#The result after Bubble Sort is: ['17', '27', '29', '33', '49', '5', '58', '62']

#Process finished with exit code 0

上一篇
[Day 16]物件導向化:Bubble Sort
下一篇
[Day 18]物件導向一定要會的功能:繼承
系列文
從零開始的Python練成記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言